<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
function Human(n){
    this.name = n;
    // return 123;// 返回值被忽略,直接返回this
    // return 'abc';// 返回值被忽略,直接返回this
    // return [1,2,3];// 自定义返回值
    // return this;// 默认返回值
}
Human.prototype.say = function (){
    console.log( 'hi' )
}
var res1 = Human('张三');
var res2 = new Human('李四');
console.log( res1 );// undefined
console.log( res2 );// Human {name:'李四'}

// new运算符做了哪些工作?
// 1.创建一个空对象
// var res2 = new Object();

// 2.将res2的__proto__属性指向构造函数的prototype属性
// res2.__proto__ = Human.prototype

// 3.将构造函数内部的this指向res2,并执行构造函数
// Human.call(res2)

// 4.构造函数的返回值,只能返回引用类型的值
return 123;// 返回值被忽略,直接返回this
return 'hello';// 返回值被忽略,直接返回this
return [1,2,3];// new调用得到的返回值
return {a:123};// new调用得到的返回值
// 构造函数内部没有return时,默认 return this

</script>
</body>
</html>